package com.dmall.algorithm.chapter01;

public class Leetcode21V2 {

    private static class ListNode {
        int val;
        ListNode next;

        ListNode() {
        }

        ListNode(int val) {
            this.val = val;
        }

        ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
    }

    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode dummy = new ListNode(-1);

        ListNode prev = dummy;
        while (l1 != null && l2 != null) {
            if (l1.val <= l2.val) {
                prev.next = l1;
                l1 = l1.next;
            } else {
                prev.next = l2;
                l2 = l2.next;
            }
            prev = prev.next;
        }

        // 合并后 l1 和 l2 最多只有一个还未被合并完，我们直接将链表末尾指向未合并完的链表即可
        prev.next = l1 == null ? l2 : l1;

        return dummy.next;
    }


    public static void main(String[] args) {
        ListNode l1 = new ListNode(-9);
        ListNode l2 = new ListNode(5);
        l1.next = new ListNode(3);

        l2.next = new ListNode(7);
        Leetcode21V2 leetcode21 = new Leetcode21V2();
        ListNode result = leetcode21.mergeTwoLists(l1, l2);
        while (result != null) {
            System.out.print(result.val);
            System.out.print("->");
            result = result.next;
        }
        System.out.print("NULL");
        System.out.println();
    }
}
